package 牛客.二叉树;

import 剑指offer.TreeNode;

import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Queue;

public class BM27按之字形顺序打印二叉树 {
    public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
        if (pRoot==null) {
            return new ArrayList<>();
        }

        ArrayList<ArrayList<Integer>> res=new ArrayList<>();
        Queue<TreeNode> queue=new LinkedList<>();
        queue.add(pRoot);

        boolean flag=true;//为true时就要进行反转
        while (!queue.isEmpty()) {
            int size=queue.size();
            ArrayList<Integer> list=new ArrayList<>();
            for (int i = 0; i <size ; i++) {
                TreeNode node=queue.poll();
                list.add(node.val);
                if (node.left!=null) {
                    queue.add(node.left);
                }
                if (node.right!=null) {
                    queue.add(node.right);
                }
            }
            //当前层遍历结束，对标志位进行改变，false 和 true 循环交替，为true才反转
            flag=!flag;
            if (flag) {
                Collections.reverse(list);
            }
            res.add(list);
        }
        return res;

    }
}
